/*
 * ConsultaListaAction.java
 *
 * Created on August 7, 2007, 9:08 AM
 */

package br.usp.poli.mfc.struts.action;

import br.usp.poli.mfc.struts.DAO.DAOFactory;
import br.usp.poli.mfc.struts.DAO.ListaDAO;
import br.usp.poli.mfc.struts.DAO.RevistaDAO;
import br.usp.poli.mfc.struts.bean.Lista;
import br.usp.poli.mfc.struts.bean.ListaPendencia;
import br.usp.poli.mfc.struts.bean.Revista;
import br.usp.poli.mfc.struts.bean.Usuario;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
/**
 *
 * @author William T.
 * @version
 */

public class ConsultaListaAction extends Action {
    
    private final static String NEXT = "next";
    
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        /* Deve pegar todas as revistas primeiro
         *
         */
        HttpSession session = request.getSession();
        Usuario user = (Usuario)session.getAttribute("usuario");
        RevistaDAO revistaDAO = DAOFactory.getRevistaDAO();
        ListaDAO listaDAO = DAOFactory.getListaDAO();
        ArrayList<Lista> inscritas = listaDAO.getListaByUsuario(user.getId_usuario());
        ArrayList<Revista> revInscritas = new ArrayList<Revista>();
        ArrayList<ListaPendencia> pendencias = new ArrayList<ListaPendencia>();
        HashMap<Integer,ArrayList<Lista>> listasPendencias = null;
        if(inscritas != null) {
            System.out.println("Listas Inscritas: " + inscritas.size());
            for (int i = 0; i < inscritas.size(); i++) {
                Revista rev = revistaDAO.getRevistaByID(inscritas.get(i).getIDRevista(),true); // essa boolean eh POG
                revInscritas.add(rev);
            }
            // Obtem a lista de pendencias (nao foi dado baixa de entrega ou de recebimento) por revista
            for (int i = 0; i < revInscritas.size(); i++) {
                if(listasPendencias == null) listasPendencias = new HashMap<Integer,ArrayList<Lista>>();
                ArrayList<Lista> pendencia = listaDAO.getListaPendenteByRevista(revInscritas.get(i).getIDRevista());
                listasPendencias.put(revInscritas.get(i).getIDRevista(),pendencia);
            }
            for (int i = 0; i < inscritas.size(); i++) {
                ListaPendencia lp = new ListaPendencia(revInscritas.get(i));
                ArrayList<Lista> p = listasPendencias.remove(revInscritas.get(i).getIDRevista());
                Lista firstDevedor = null;
                if(p != null) {
                    firstDevedor = p.get(0);
                }
                if(firstDevedor != null && firstDevedor.getIDUsuario() == user.getId_usuario()) {
                    if(firstDevedor.getDt_Recebimento() == null) {
                        lp.setRecebimento(true);
                    } else if (firstDevedor.getDt_Entrega() == null) {
                        lp.setEntrega(true);
                        lp.setDt_recebimento(firstDevedor.getDt_Recebimento());
                    }
                } else {
                    Lista lxu = listaDAO.getListaByRevistaUsuario(revInscritas.get(i).getIDRevista(),user.getId_usuario());
                    lp.setDt_entrega(lxu.getDt_Entrega());
                    lp.setDt_recebimento(lxu.getDt_Recebimento());
                }
                pendencias.add(lp);
                
            }
            if(session.getAttribute("pendencias") != null) session.removeAttribute("pendencias");
            request.setAttribute("pendencias",pendencias);
        }
        
        return mapping.findForward(NEXT);
        
    }
}
